import json
import re
from pathlib import Path
import traceback
from conn_manager import BASE_DATA_DIR, FAQ_DATA_DIR, EC_DATA_DIR
import logging

# 初始化日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def replace_characters_in_txt_files(base_dir=None):
    """遍历目录下的所有txt文件，并替换其中的特定字符"""
    
    if base_dir is None:
        # 使用配置中的基础数据目录
        base_dir = Path(BASE_DATA_DIR)
        logger.info(f"📁 使用配置的基础数据目录: {BASE_DATA_DIR}")
    else:
        base_dir = Path(base_dir)
        
    abs_base_dir = base_dir.resolve()
    logger.info(f"🚀 开始文本清理任务，目标目录: {abs_base_dir}")
    
    if not base_dir.exists():
        logger.warning(f"⚠️ 目录不存在: {abs_base_dir}")
        return 0, 0
    
    # 查找所有子目录中的txt文件
    txt_files = list(base_dir.rglob("*.txt"))
    logger.info(f"📋 找到 {len(txt_files)} 个txt文件需要处理")
    
    if not txt_files:
        logger.warning("⚠️ 没有找到任何txt文件")
        return 0, 0
    
    processed_files = 0
    total_replacements = 0
    
    for txt_file in txt_files:
        relative_path = txt_file.relative_to(base_dir)
        logger.info(f"🔄 处理文件: {relative_path}")
        
        try:
            # 读取文件内容
            with txt_file.open('r', encoding='utf-8') as file:
                content = file.read()
            
            # 尝试解析为JSON数组
            try:
                data = json.loads(content)
                if not isinstance(data, list):
                    logger.warning(f"⚠️ {relative_path} 不是JSON数组格式，跳过")
                    continue
            except json.JSONDecodeError as e:
                logger.warning(f"⚠️ {relative_path} JSON解析失败，跳过: {str(e)}")
                continue
            
            file_replacements = 0
            
            # 遍历JSON数组中的每个对象
            for item in data:
                if isinstance(item, dict):
                    # 对每个字段进行处理
                    for key, value in item.items():
                        if isinstance(value, str):
                            # 执行替换操作
                            original_value = value
                            # 替换 \n 为实际换行符
                            value = value.replace('\\n', '\n')
                            # 替换 \" 为实际双引号
                            value = value.replace('\\"', '"')
                            # 移除多余的换行符和空白字符
                            value = re.sub(r'\n+', '\n', value).strip()
                            
                            if value != original_value:
                                item[key] = value
                                file_replacements += 1
            
            # 如果有替换，则写回文件
            if file_replacements > 0:
                with txt_file.open('w', encoding='utf-8') as file:
                    json.dump(data, file, ensure_ascii=False, indent=2)
                
                logger.info(f"✅ {relative_path}: 完成 {file_replacements} 次字符替换")
                processed_files += 1
                total_replacements += file_replacements
            else:
                logger.info(f"🔍 {relative_path}: 无需替换")
            
        except Exception as e:
            logger.error(f"❌ 处理文件 {relative_path} 时出错: {str(e)}")
            logger.error(f"🔍 详细错误信息:\n{traceback.format_exc()}")
    
    logger.info(f"🎉 文本清理任务完成！")
    logger.info(f"📊 处理统计:")
    logger.info(f"  📄 总文件数: {len(txt_files)}")
    logger.info(f"  ✅ 已处理文件: {processed_files}")
    logger.info(f"  🔄 总替换次数: {total_replacements}")
    
    return processed_files, total_replacements

if __name__ == "__main__":
    logger.info("🧹 直接运行文本清理脚本...")
    try:
        processed, replacements = replace_characters_in_txt_files()
        logger.info(f"✅ 文本清理完成，处理了 {processed} 个文件，执行了 {replacements} 次替换")
    except Exception as e:
        logger.error(f"❌ 文本清理脚本运行失败: {str(e)}")
        logger.error(f"🔍 详细错误信息:\n{traceback.format_exc()}")
